跳到主要内容

Unity 中的调试工具

可视化辅助类 Gizmos

Gizmos 用于场景中给出一个可视化的调试或辅助设置。 所有的 Gizmos 绘制都必须在脚本的 OnDrawGizmos 或 OnDrawGizmosSelected 函数中完成。 OnDrawGizmos 在每一帧都被调用。所有在 OnDrawGizmos 内部渲染的 Gizmos 都是可见的。 OnDrawGizmosSelected 尽在脚本所附加的物体被选中时调用。

private void OnDrawGizmos()
{
Gizmos.color = isOnGround ? Color.red : Color.green;
Gizmos.DrawSphere(transform.position + new Vector3(0, coll.offset.y), footDistance);
}
/// <summary>
/// 随程序启动运行
/// </summary>
void OnDrawGizmos()
{
Gizmos.DrawCube(transform.position, new Vector3(1,1,1));
}

/// <summary>
/// 当鼠标点击时候运行
/// </summary>
void OnDrawGizmosSelected()
{
Gizmos.DrawSphere(transform.position, 2f);
}

即时模式 GUI

参考资料 IMGUI 基础知识

“即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数。

例如,以下代码:

public class TestControllerGUI : MonoBehaviour
{
private void OnGUI()
{
if (GUILayout.Button("Press Me"))
Debug.Log("Hello!");
}
}

即时模式 GUI 系统常用于:

  • 创建游戏内调试显示和工具。
  • 为脚本组件创建自定义检视面板。
  • 创建新的编辑器窗口和工具以扩展 Unity 本身。

使用 IMGUI 创建控件

Unity 的 IMGUI 控件使用一个名为 OnGUI() 的特殊函数。只要启用包含脚本,就会在每帧调用 OnGUI() 函数,就像 Update() 函数一样。

IMGUI 控件本身结构非常简单。此结构如以下示例中所示。

/* 示例关卡加载程序 */
using UnityEngine;
using System.Collections;

public class GUITest : MonoBehaviour {

void OnGUI ()
{
// 创建背景框
GUI.Box(new Rect(10,10,100,90), "Loader Menu");

// 创建第一个按钮。如果按下此按钮,则会执行 Application.Loadlevel (1)
if(GUI.Button(new Rect(20,40,80,20), "Level 1"))
{
Application.LoadLevel(1);
}

// 创建第二个按钮。
if(GUI.Button(new Rect(20,70,80,20),"Level 2"))
{
Application.LoadLevel(2);
}
}
}

此示例是一个可运行的完整关卡加载程序。如果复制/粘贴此脚本并将其附加到游戏对象,则在进入播放模式时,将显示以下菜单: